﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Cotizav.LogicaNegocio
{
    public class EquipoBLL
    {
        public List<Entidades.Equipo> Listar()
        {
            AccesoDatos.EquipoDAO equipoDAO = new AccesoDatos.EquipoDAO();

            using (Util.ContextoDB ctx = Util.ContextoDB.GetContexto())
            {
                return equipoDAO.Listar(ctx);
            }
        }

        public int Guardar(Entidades.Equipo newEquipo)
        {
            if (string.IsNullOrWhiteSpace(newEquipo.CodigoEquipo))
            {
                throw new ApplicationException("El Codigo del equipo se encuentra vacío");
            }

            if (!newEquipo.IdModelo.HasValue)
            {
                throw new ApplicationException("No ha ingresado el modelo del equipo");
            }

            if (string.IsNullOrWhiteSpace(newEquipo.NombreEquipo))
            {
                throw new ApplicationException("Ingrese el nombre del equipo");
            }

            if (newEquipo.ListCaracteristica.Count == 0)
            {
                throw new ApplicationException("Ingrese por lo mínimo una caracteristica para registrar el equipo");
            }

            AccesoDatos.EquipoDAO equipoDAO = new AccesoDatos.EquipoDAO();
            int resultado = 0;

            using (Util.ContextoDB ctx = Util.ContextoDB.GetContexto())
            {
                ctx.LoadTransaction();
                resultado = equipoDAO.Registrar(ctx, newEquipo);

                CaracteristicaBLL caracteristicaBLL = new CaracteristicaBLL();
                foreach(Entidades.Caracteristica c in newEquipo.ListCaracteristica)
                {
                    resultado += caracteristicaBLL.Registrar(ctx, newEquipo, c);
                }

                ListaTarifaBLL listaTarifaBLL = new ListaTarifaBLL();
                foreach (Entidades.ListaTarifa l in newEquipo.ListListaTarifa)
                {
                    resultado += listaTarifaBLL.Registrar(ctx, newEquipo, l);
                }

                ctx.ConfirmarTx();
            }

            return resultado;
        }

        public List<Entidades.Equipo> Buscar(string argEquipo, string valor)
        {
            List<Entidades.Equipo> lista;
            List<Entidades.Equipo> resultado = new List<Entidades.Equipo>();

            if (!string.IsNullOrWhiteSpace(valor))
            {
                lista = Listar();

                switch (argEquipo)
                {
                    case "CODIGO":
                    case "codigo":
                        resultado = lista.Where(x => x.CodigoEquipo.Contains(valor)).OrderBy(x => x.CodigoEquipo).ToList();
                        break;
                    case "NOMBREEQUIPO":
                    case "nombreEquipo":
                        resultado = lista.Where(x => x.NombreEquipo.Contains(valor)).OrderBy(x => x.NombreEquipo).ToList();
                        break;
                }
            }
            else
            {
                resultado = Listar();
            }

            return resultado;
        }
    }
}
